﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	printf("%d", n);
//
//	return 0;
//}


//int main()
//{
//	int a = 10000;
//	FILE * pf = fopen("test.txt", "wb");
//	fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	fclose(pf);
//	pf = NULL;
//
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	////写文件
//	//fputc('a', pf);
//	//fputc('b', pf);
//	//fputc('c', pf);
//
//	/*char ch = 0;
//	for (ch = 'a'; ch <= 'z'; ch++)
//	{
//		fputc(ch, pf);
//	}*/
//
//
//
//
//
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
// 
// 
//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件  //会依次往后读
//	int ch = 0;
//	while ((ch =fgetc(pf))!= EOF)
//	{
//		printf("%c ", ch);
//	}
//
//	
//
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fputs("hello world\n", pf);
//	fputs("hello bit", pf);
//
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20] = "xxxxxxxxxxxxx";
//	fgets(arr, 20, pf);
//	printf("%s", arr);
//
//	fgets(arr, 20, pf);
//	printf("%s", arr);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20] = { 0 };
//	while (fgets(arr, 20, pf) != NULL)
//	{
//		printf("%s", arr);
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20] = { 0 };
//	while (fgets(arr, 20, pf) != NULL)
//	{
//		printf("%s", arr);
//	}
//	//fgets(arr,20,pf);//最多读n-1个  留一个给\0
//	////也会读\n
//	//printf("%s", arr);
//
//	///*fgets(arr, 20, pf);
//	//printf("%s", arr);*/
//
//
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	//char buf[200] = { 0 };
//	struct S s = { "张三",20,65.5f };
//	FILE* pf = fopen("test2.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写文件 - 文本形式写进去
//	fprintf(pf, "%s %d %f", s.name, s.age, s.score);
//
//	fclose(pf);
//	pf = NULL; 
//	
//	/*sprintf(buf,"%s %d %f", s.name, s.age, s.score);
//
//	printf("1以字符串的形式%s\n", buf);
//	struct S t = { 0 };
//	sscanf(buf,"%s %d %f", t.name, &(t.age), &(t.score));
//	printf("2按照格式打印  %s %d %f\n", t.name, t.age, t.score);*/
//	return 0;
//}


//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	
//	struct S s = { 0 };
//	FILE* pf = fopen("test2.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件 - 
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//
//	//打印
//	//printf("%s %d %f\n", s.name, s.age, s.score);
//	fprintf(stdout, "%s %d %f\n", s.name, s.age, s.score);
//
//	fclose(pf);
//	pf = NULL;
//
//	
//	return 0;
//}

//stdout输出   std输入可以打印在屏幕上 键盘
//int main()
//{
//	fputc('a', stdout);
//	return 0;
//}

//scanf  从标准输入流上读取格式化的数据
//fscanf  从指定输入流上读取格式化的数据
//sscanf   在字符串中读取格式化的数据
//printf 把数据以格式化的形式打印在标准输出流上
//fprintf 把数据以格式化的形式打印在指定的输出流上 
//sprintf 把格式化的数据转化成字符串

//typedef struct s
//{
//	char name[20];
//	int age;
//	float score;
//}S;
//int main()
//{
//	char buf[200] = { 0 };
//	S s = { "张三",20,65.5f };
//	sprintf(buf, "%s %d %f", s.name, s.age, s.score);
//
//	printf("1以字符串的形式打印:%s\n", buf);
//	S t = { 0 };
//	sscanf(buf,"%s %d %f", t.name, &(t.age), &(t.score));
//	printf("2按照格式打印:  %s %d %f\n", t.name, t.age, t.score);
//
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5 };
//
//	FILE* pf = fopen("test.txt", "wb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	fwrite(arr, sizeof(arr[0]), sz, pf);//以二进制的形式写进去
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//
//}

//int main()
//{
//	int arr[5] = { 0 };
//
//	FILE* pf = fopen("test.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读数据
//	
//	fread(arr, sizeof(arr[0]),5, pf);//以二进制的形式读
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//
//}


//int main()
//{
//	int arr[5] = { 0 };
//	FILE* pf = fopen("test.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	while (fread(&arr[i], sizeof(int), 1, pf))
//	{
//		printf("%d ", arr[i]);
//		i++;
//	}
//	
//	
//	fclose(pf);
//	pf = NULL;
//	return 0;
//
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	int ch = fgetc(pf);
//	printf("%c\n", ch);//a
//	
//	//fseek(pf, 4, SEEK_CUR);
//	//fseek(pf, 5, SEEK_SET);
//	fseek(pf, -4, SEEK_END);
//	ch = fgetc(pf);
//	printf("%c\n", ch);//f
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);//c
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//SEEK_SET文件的起始位置 
//SEEK_CUR文件指针当前位置
//SEEK_END文件末尾

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = fgetc(pf);
//	printf("%c\n", ch);//a
//	//fseek(pf, -4, SEEK_END);
//	fseek(pf, 0, SEEK_END);
//
//	printf("%d\n", ftell(pf));
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = fgetc(pf);
//	printf("%c\n", ch);//a
//	fseek(pf, -4, SEEK_END);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);//f  
//	
//	rewind(pf);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);//a
//
//	fclose(pf);
//	pf = NULL; 
//	return 0;
//}

//文件现在读取结束了，但是是什么原因读取结束的呢？
//1.有可能是遇到文件末尾 feof
//2.读取的时候发生了错误 ferror
//打开的一个流的时候这个流上有2个标记值：1.是否遇到文件末尾 2.是否发生错误
//fgetc- 如果读取正常，返回的是读取到字符的ASCII码值
//       如果读取的过程中，遇到文件末尾，或者发生错误，就返回EOF
//fgets- 如果读取正常，返回的是存储读取到的字符串的字符数组的地址
//       如果读取的过程中遇到文件末尾，或者发生错误，返回NULL
//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{ 
//		perror("fopen"); 
//		return 1;
//	}
//	int  ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c\n", ch);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束\n");
//	}
//	else if (ferror(pf))
//	{
//		perror("fgetc");
//	}
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int  i = 0;
//	char ch = 0;
//	for (ch = 'a'; ch <= 'z'; ch++)
//	{
//		fputc(ch, pf);
//	} 
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束\n");
//	}
//	else if (ferror(pf))
//	{
//		perror("fputc");
//	}
//	return 0;
//}

//拷贝文件
//int main()
//{
//	FILE* pfin = fopen("test.txt", "r");
//	if (pfin == NULL)
//	{
//		perror("fopen:test.txt");
//		return 1;
//	}
//	FILE* pfout = fopen("test2.txt", "w");
//	if (pfout == NULL)
//	{
//		fclose(pfin);
//		perror("fopen:test2.txt");
//		return 1;
//	}
//	int ch = 0;
//	while ((ch = fgetc(pfin)) != EOF)
//	{
//		fputc(ch, pfout);
//	}
//	fclose(pfin);
//	fclose(pfout);
//	pfin = NULL;
//	pfout = NULL;
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int  ch = 0;
//	for (ch = 'a'; ch <= 'z'; ch++)
//	{
//		fputc(ch, pf);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束\n");
//	}
//	else if (ferror(pf))
//	{
//		perror("fputc");
//	}
//	return 0;
//}

#include <windows.h>
////VS2022 WIN11环境测试
int main()
{
	FILE* pf = fopen("test3.txt", "w");
	fputs("abcd", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了，打开test.txt⽂件，发现⽂件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
	//注：fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒-此时，再次打开test.txt⽂件，⽂件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
	pf = NULL;
	return 0;
}


